#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/module.h>

struct task_struct* ts;
int                 mythread(void* data)
{
    printk("my thread run ...., data = %s\n", (char*)data);

    // wait to exit
    while (!kthread_should_stop()) {
        printk("wait to exit ... \n");
        msleep_interruptible(200);
    }
    return 0;
}

static int hello_init(void)
{
    printk("module init\n");
    ts = kthread_run(mythread, "12345", "mythread");
    return 0;
}

static void hello_cleanup(void)
{
    kthread_stop(ts);  // 通知线程可以退出。
    printk("byebye module.\n");
}

module_init(hello_init);
module_exit(hello_cleanup);
MODULE_LICENSE("GPL");
